//record 约束对象的key和value

type Key = 'c' | 'x' | 'k'

type Value = '唱' | '跳' | 'rap' | '篮球'
// 对象的key 只能是symbol string number 那么keyof any正好获取这三个类型
// K表示创建的新对象需要具有哪些属性，属性可以只有一个，也可以有多个，多个属性时采用"联合类型"的写法。
// T表示对象属性的类型。
let objR: Record<Key, Value> = {
  c: '唱',
  x: '跳',
  k: 'rap',
}

type CustomRecord<K extends keyof any,T> = {
  [P in K]: T
}

//嵌套约束
let objC: CustomRecord<Key, Record<Key, Value>> = {
  'c': {
      'c': '唱',
      'x': '跳',
      'k': 'rap'
  },
  "x": {
      'c': '唱',
      'x': '跳',
      'k': 'rap'
  },
  "k": {
      'c': '唱',
      'x': '跳',
      'k': 'rap'
  }
}